import java.util.Comparator;

/**
 * Created with IntelliJ IDEA.
 * Description:初识泛型和包装类
 * User: 阿宾
 * Date: 2024-08-11
 * Time: 15:00
 */
class MyArray<T>{//<T>表示当前类是一个泛型类
//    public Object[] array = new Object[10];
    public T[] array = (T[])new Object[10];//不建议

    /*public void set(int pos,Object val){
        this.array[pos] = val;
    }*/
    public void set(int pos,T val){
        this.array[pos] = val;
    }
    /*public Object get(int pos){
        return this.array[pos];
    }*/
    public T get(int pos){
        return (T) this.array[pos];
    }
}

//T extends Comparable<T> 要求T一定是实现Comparable接口的
class Alg<T extends Comparable<T>>{
    //求指定类型的数组最大值
    public T findMax(T[] array){
        T max = array[0];
        for (int i = 1; i < array.length; i++) {
            if(array[i].compareTo(max) > 0){
                max = array[i];
            }
        }
        return max;
    }
}


public class Test01 {
    public static void main(String[] args) {
        Alg<Integer> alg = new Alg<>();
        Integer[] array = {1,3,45,22,56,31};
        Integer ret = alg.findMax(array);
        System.out.println(ret);
    }
    public static void main3(String[] args) {
        MyArray<String> myArray = new MyArray<>();//指定存储字符串
        myArray.set(0,"hello");
        //myArray.set(1,80);//因为指定了，所以不能存放整型

        //String str = (String)myArray.get(0); //需要强转，不然会报错
        String str =  myArray.get(0); //不需要强转了
        System.out.println(str);

        MyArray<Integer> myArray1 = new MyArray<>();
        myArray1.set(0,89);
        myArray1.set(0,56);
        Integer a = myArray1.get(0);
        System.out.println(a);
    }
    /*public static void main2(String[] args) {
        //拆箱 把一个包装类型 转为 基本数据类型的过程
        Integer a = new Integer(10);
        int b = a;//自动拆箱
        System.out.println(b);

        //显示拆箱，拆箱为自己指定的元素
        int c = a.intValue();
        System.out.println(c);

        double d = a.doubleValue();
        System.out.println(d);
    }*/
    public static void main1(String[] args) {
        //装箱：把一个基本数据类型 转为 包装类型的过程
        //分成两种
        //1.自动装箱 2.显示装箱
        int a = 10;
        Integer b = a;//自动装箱
        System.out.println(b);

        Integer c = Integer.valueOf(a);//显示装箱
        System.out.println(c);



    }
}
